/*
 * Copyright (C) 2010 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.settings.wifi;

import com.android.settings.R;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

class WifiDialog extends AlertDialog implements WifiConfigUiBase {
	static final int BUTTON_SUBMIT = DialogInterface.BUTTON_POSITIVE;
	static final int BUTTON_FORGET = DialogInterface.BUTTON_NEUTRAL;

	private final boolean mEdit;
	private final ICustomButtonClickListener mListener;
	private final AccessPoint mAccessPoint;

	private View mView;
	private WifiConfigController mController;

	public WifiDialog(Context context, ICustomButtonClickListener listener,
			AccessPoint accessPoint, boolean edit) {
		super(context, R.style.Theme_WifiDialog);
		mEdit = edit;
		mListener = listener;
		mAccessPoint = accessPoint;
	}

	@Override
	public WifiConfigController getController() {
		return mController;
	}

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		mView = getLayoutInflater().inflate(R.layout.wifi_dialog, null);
		setView(mView);

		setInverseBackgroundForced(true);
		mController = new WifiConfigController(this, mView, mAccessPoint, mEdit);
		setTitle(mAccessPoint.ssid);
		super.onCreate(savedInstanceState);
		/*
		 * During creation, the submit button can be unavailable to determine
		 * visibility. Right after creation, update button visibility
		 */
		mController.enableSubmitIfAppropriate();
	}

	@Override
	public boolean isEdit() {
		return mEdit;
	}

	@Override
	public Button getSubmitButton() {
		return getButton(BUTTON_SUBMIT);
	}

	@Override
	public Button getForgetButton() {
		return getButton(BUTTON_FORGET);
	}

	@Override
	public Button getCancelButton() {
		return getButton(BUTTON_NEGATIVE);
	}

	@Override
	public void setSubmitButton(CharSequence text) {
		setCustomButton(BUTTON_SUBMIT, text, mListener);
	}

	@Override
	public void setForgetButton(CharSequence text) {
		setCustomButton(BUTTON_FORGET, text, mListener);
	}

	@Override
	public void setCancelButton(CharSequence text) {
		setCustomButton(BUTTON_NEGATIVE, text, mListener);
	}

	public void setCustomButton(final int whichButton, CharSequence text,
			ICustomButtonClickListener listener) {
		Button button = null;
		Log.d("button", "======" + text + whichButton);
		switch (whichButton) {
		case BUTTON_NEGATIVE:
			button = ((Button) mView.findViewById(R.id.button1));

			break;
		case BUTTON_FORGET:
			button = ((Button) mView.findViewById(R.id.button2));
			break;
		case BUTTON_SUBMIT:
			button = ((Button) mView.findViewById(R.id.button3));
			break;

		}
		button.setVisibility(View.VISIBLE);
		button.setText(text);
		button.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View arg0) {
				mListener.onClick(whichButton);
				dismiss();
			}
		});
	}

	@Override
	public Button getButton(int whichButton) {
		Button button = null;
		switch (whichButton) {
		case BUTTON_NEGATIVE:
			button = ((Button) mView.findViewById(R.id.button1));

			break;
		case BUTTON_FORGET:
			button = ((Button) mView.findViewById(R.id.button2));
			break;
		case BUTTON_SUBMIT:
			button = ((Button) mView.findViewById(R.id.button3));
			break;

		}
		return button;
	}
	
	@Override
	public void setTitle(CharSequence title) {
		((TextView)mView.findViewById(R.id.custom_title)).setText(title);
	}

	static interface ICustomButtonClickListener {
		public void onClick(int button);
	}
}
